#ifndef GY_GRAPHICSIMAGE_H
#define GY_GRAPHICSIMAGE_H

#include "Graphics/BasicGraphics/GY_BasicsGraphicsObject.h"
#include "Graphics/GY_Object.h"
#include "GY_ControlLibrary_global.h"
#include <QGraphicsPixmapItem>
#include <QPixmap>
#include <QPointF>
#include <QPainter>
#include <QObject>
#include <QDebug>

class GY_CONTROLLIBRARY_EXPORT GY_GraphicsImage : public GY_BasicsGraphicsObject
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_GraphicsImage(const QString &guid,QGraphicsItem *parent = nullptr);

private:
    /**
     * @brief updatePositionPoint 更新图片位置编辑点（默认位于左下角）
     * @param name
     * @param value
     * @return
     */
    bool updatePositionPoint(const QString &name,const QVariant &value);
    /**
     * @brief updateSizePoint 更新图片尺寸编辑点（默认位于右上角）
     * @param name
     * @param value
     * @return
     */
    bool updateSizePoint(const QString &name,const QVariant &value);
    /**
     * @brief updatePoint 更新编辑点位置
     * @param name 编辑点
     * @param value 点数据
     * @return 是否更新成功
     */
    bool updatePoint(const QString &name,const QVariant &value);
    /**
     * @brief updateRotationAngle 更新旋转角度（以位置编辑点为圆心且不分正负）
     * @param name
     * @param value
     * @return
     */
    bool updateRotationAngle(const QString &name,const QVariant &value);
    /**
     * @brief updateIndex 选择传入的图片文件路径（传入固定图片路径即可）
     * @param name
     * @param value
     * @return
     */
    bool updateIndex(const QString &name,const QVariant &value);
    /**
     * @brief updateAlphaValue 更新图片透明度（取值范围：0~255）
     * @param name
     * @param value
     * @return
     */
    bool updateAlphaValue(const QString &name,const QVariant &value);
    /**
     * @brief updateRealSize 恢复图片至实际尺寸
     * @param name
     * @param value
     * @return
     */
    bool updateRealSize(const QString &name,const QVariant &value);
    /**
     * @brief updateProportionalSize 恢复图片至等比例尺寸
     * @param name
     * @param value
     * @return
     */
    bool updateProportionalSize(const QString &name,const QVariant &value);
    /**
     * @brief updateImage 更新图片
     * @param position 位置旋转点（既可拖动改变位置又是图片的旋转点）
     * @param sizePoint 尺寸拖动点（改变图片尺寸）
     * @param rotationAngle 旋转角度
     * @param index 图片路径
     * @param alphaValue 透明度
     */
    void updateImage();
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief precalculatedPosition 计算点位置
     * @param centerPoint  中心点位置
     * @param radius 半径
     * @param angele 角度
     * @return 计算得到的点位置
     */
    QPointF precalculatedPosition(const QPointF &centerPoint, const double radius, const double angele);
//    void updateImage(QPointF positionPoint, QPointF sizePoint, const qreal rotationAngle, const QString &index, const int alphaValue);
signals:


    // QGraphicsItem interface
public:
//    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};

#endif // GY_GRAPHICSIMAGE_H
